import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { LoggingInterceptor } from './interceptor/logging.interceptor';
import { ConfigModule, ConfigService } from '@nestjs/config';

declare const module: any;

async function bootstrap() {

  // 等待环境变量加载完成
  await ConfigModule.envVariablesLoaded;

  // 创建 Nest 应用实例
  const app = await NestFactory.create(AppModule);

  const configService = app.get(ConfigService);

  // 注册全局管道，对全局入参进行萃取过滤
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true, // 过滤DTO中不存在的属性
      forbidNonWhitelisted: true, // 过滤不通过自动返回错误响应
      transform: true, // 根据DTO自动转换类型
    })
  )

  // 设置全局路由前缀
  app.setGlobalPrefix('nestAdmin')

  // 绑定拦截器（拦截所有请求）
  app.useGlobalInterceptors(new LoggingInterceptor())

  await app.listen(configService.get('DATABASE_PORT') ?? 3000);

  if (module.hot) {
    module.hot.accept();
    module.hot.dispose(() => app.close());
  }
}
bootstrap();
